package com.server.llh.llhserverwork.view;

import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;

import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.llh.llhsuppliers.R;
import com.server.llh.llhserverwork.activity.WebViewActivity;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class SlideShowViewPager extends FrameLayout implements OnClickListener{  
    
  // 使用universal-image-loader插件读取网络图片，需要工程导入universal-image-loader-1.8.6-with-sources.jar  
  private ImageLoader imageLoader = ImageLoader.getInstance();

  //轮播图图片数量  
  private final static int IMAGE_COUNT = 5;  
  //自动轮播的时间间隔  
  private final static int TIME_INTERVAL = 5;  
  //自动轮播启用开关  
  private final static boolean isAutoPlay = true;   
    
  //自定义轮播图的资源  
  private List<Map<String,String>> imageUrls;  
  //放轮播图片的ImageView 的list  
  private List<ImageView> imageViewsList;  
  //放圆点的View的list  
  private List<View> dotViewsList;  
    
  private ViewPager viewPager;  
  //当前轮播页  
  private int currentItem  = 0;  
  //定时任务  
  private ScheduledExecutorService scheduledExecutorService;  
    
  private Context context;  
    
  //Handler  
  private Handler handler = new Handler(){  

      @Override  
      public void handleMessage(Message msg) {  
          super.handleMessage(msg);  
          viewPager.setCurrentItem(currentItem);  
      }  
        
  };  
    
  public SlideShowViewPager(Context context) {  
      this(context,null);  
  }  
  public SlideShowViewPager(Context context, AttributeSet attrs) {  
      this(context, attrs, 0);  
  }  
  public SlideShowViewPager(Context context, AttributeSet attrs, int defStyle) {  
      super(context, attrs, defStyle);  
      this.context = context;  

      initImageLoader(context);  
        
      if(isAutoPlay){  
          startPlay();  
      }  
        
  }  
  /** 
   * 开始轮播图切换 
   */  
  private void startPlay(){  
      scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();  
      scheduledExecutorService.scheduleAtFixedRate(new SlideShowTask(), 1, 4, TimeUnit.SECONDS);  
  }  
  /** 
   * 停止轮播图切换 
   */  
  private void stopPlay(){  
      scheduledExecutorService.shutdown();  
  }  
  /** 
   * 初始化相关Data 
   */  
  private void initData(){  
      imageViewsList = new ArrayList<ImageView>();  
      dotViewsList = new ArrayList<View>();  
      initUI(context);  
  }  
  
  public void setImageUrls(List<Map<String,String>> imageList){
  	this.imageUrls = imageList;
  	 initData();
  }
  
  @Override
	public void onClick(View v) {
  	Intent intent = null;
  	Bundle bundle = null;
  	switch (v.getId()) {
		case 0:
			intent = new Intent(context,WebViewActivity.class);
			bundle = new Bundle();
			bundle.putString("url", imageUrls.get(0).get("imageUris"));
			intent.putExtras(bundle);
			context.startActivity(intent);
			break;
		case 1:
			intent = new Intent(context,WebViewActivity.class);
			bundle = new Bundle();
			bundle.putString("url", imageUrls.get(1).get("imageUris"));
			intent.putExtras(bundle);
			context.startActivity(intent);
			break;
		case 2:
			intent = new Intent(context,WebViewActivity.class);
			bundle = new Bundle();
			bundle.putString("url", imageUrls.get(2).get("imageUris"));
			intent.putExtras(bundle);
			context.startActivity(intent);
			break;
		case 3:
			intent = new Intent(context,WebViewActivity.class);
			bundle = new Bundle();
			bundle.putString("url", imageUrls.get(3).get("imageUris"));
			intent.putExtras(bundle);
			context.startActivity(intent);
			break;
		case 4:
			intent = new Intent(context,WebViewActivity.class);
			bundle = new Bundle();
			bundle.putString("url", imageUrls.get(3).get("imageUris"));
			intent.putExtras(bundle);
			context.startActivity(intent);
			break;
		case 5:
			intent = new Intent(context,WebViewActivity.class);
			bundle = new Bundle();
			bundle.putString("url", imageUrls.get(3).get("imageUris"));
			intent.putExtras(bundle);
			context.startActivity(intent);
			break;
		case 6:
			intent = new Intent(context,WebViewActivity.class);
			bundle = new Bundle();
			bundle.putString("url", imageUrls.get(3).get("imageUris"));
			intent.putExtras(bundle);
			context.startActivity(intent);
			break;
		case 7:
			intent = new Intent(context,WebViewActivity.class);
			bundle = new Bundle();
			bundle.putString("url", imageUrls.get(3).get("imageUris"));
			intent.putExtras(bundle);
			context.startActivity(intent);
			break;
		case 8:
			intent = new Intent(context,WebViewActivity.class);
			bundle = new Bundle();
			bundle.putString("url", imageUrls.get(3).get("imageUris"));
			intent.putExtras(bundle);
			context.startActivity(intent);
			break;
		}
  }

//  dots = new ImageView[img.length];  
//  //将小圆点填充到数组中  
//  for (int i = 0; i < dots.length; i++) {  
//
//      ImageView imageView = new ImageView(this);  
//      imageView.setLayoutParams(new LayoutParams(10, 10));  
//      dots[i] = imageView;  
//      if (i == 0) {  
//          dots[i].setBackgroundResource(R.drawable.banner_dian_focus);  
//      } else {  
//          dots[i].setBackgroundResource(R.drawable.banner_dian_blur);  
//      }  
//      group.addView(imageView);  
//  }  
//  //将图片填充到数组中  
//  imageViews = new ImageView[img.length];  
//  for(int i=0; i<imageViews.length; i++){  
//      ImageView imageView = new ImageView(this);  
//      imageViews[i] = imageView;  
//      imageView.setBackgroundResource(img[i]);  
//  }  
  private int[] img = new int[] { R.drawable.iamge3, R.drawable.image1,  
          R.drawable.image2, R.drawable.iamge4 , R.drawable.image5, R.drawable.iamge6, R.drawable.iamge7, R.drawable.iamge8};// 图片 资源  
  
  //甘肃
//	  private int[] img = new int[] { R.drawable.g1, R.drawable.g2,  
//      R.drawable.g3, R.drawable.g4 , R.drawable.g5, R.drawable.g6, R.drawable.g3, R.drawable.g4};// 图片 资源  
  /** 
   * 初始化Views等UI 
   */  
  private void initUI(Context context){  
      if(imageUrls == null || imageUrls.size() == 0)  
          return;  
        
      LayoutInflater.from(context).inflate(R.layout.layout_slide_show, this, true);
        
      LinearLayout dotLayout = (LinearLayout)findViewById(R.id.dotLayout);  
      dotLayout.removeAllViews();  
        
//      // 热点个数与图片特殊相等  
//      for (int i = 0; i < imageUrls.size(); i++) {  
//          ImageView view =  new ImageView(context);  
//          view.setId(i);
//          view.setTag(imageUrls.get(i).get("imageUrls"));  
//          if(i==0)//给一个默认图  
//              view.setBackgroundResource(R.drawable.icon_launcher);  
//          view.setScaleType(ScaleType.FIT_XY);  
//          view.setOnClickListener(this);
//          imageViewsList.add(view);  
//            
//          ImageView dotView =  new ImageView(context);  
//          LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);  
//          params.leftMargin = 4;  
//          params.rightMargin = 4;  
//          dotLayout.addView(dotView, params);  
//          dotViewsList.add(dotView);  
//      }  
      // 热点个数与图片特殊相等  
      for (int i = 0; i < img.length; i++) {  
          ImageView view =  new ImageView(context);  
          view.setId(i);
//          view.setTag(imageUrls.get(i).get("imageUrls"));  
//          if(i==0)//给一个默认图  
//              view.setBackgroundResource(R.drawable.icon_launcher); 
          view.setBackgroundResource(img[i]); 
          view.setScaleType(ScaleType.FIT_XY);  
          view.setOnClickListener(this);
          imageViewsList.add(view);  
            
          ImageView dotView =  new ImageView(context);  
          LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);  
          params.leftMargin = 4;  
          params.rightMargin = 4;  
          dotLayout.addView(dotView, params);  
          dotViewsList.add(dotView);  
      }  
        
      viewPager = (ViewPager) findViewById(R.id.viewPager);  
      viewPager.setFocusable(true);  
        
      viewPager.setAdapter(new MyPagerAdapter());  
      viewPager.setOnPageChangeListener(new MyPageChangeListener());  
  }  
    
  /** 
   * 填充ViewPager的页面适配器 
   *  
   */  
  private class MyPagerAdapter  extends PagerAdapter{  

      @Override  
      public void destroyItem(View container, int position, Object object) {  
          ((ViewPager)container).removeView(imageViewsList.get(position));  
      }  

      @Override  
      public Object instantiateItem(View container, int position) {  
          ImageView imageView = imageViewsList.get(position);  

          imageLoader.displayImage(imageView.getTag() + "", imageView);  
            
          ((ViewPager)container).addView(imageViewsList.get(position));  
          return imageViewsList.get(position);  
      }  

      @Override  
      public int getCount() {  
          return imageViewsList.size();  
      }  

      @Override  
      public boolean isViewFromObject(View arg0, Object arg1) {  
          return arg0 == arg1;  
      }  
      @Override  
      public void restoreState(Parcelable arg0, ClassLoader arg1) {  

      }  

      @Override  
      public Parcelable saveState() {  
          return null;  
      }  

      @Override  
      public void startUpdate(View arg0) {  

      }  

      @Override  
      public void finishUpdate(View arg0) {  
            
      }  
        
  }  
  /** 
   * ViewPager的监听器 
   * 当ViewPager中页面的状态发生改变时调用 
   *  
   */  
  private class MyPageChangeListener implements OnPageChangeListener{  

      boolean isAutoPlay = false;  

      @Override  
      public void onPageScrollStateChanged(int arg0) {  
          // TODO Auto-generated method stub  
          switch (arg0) {  
          case 1:// 手势滑动，空闲中  
              isAutoPlay = false;  
              break;  
          case 2:// 界面切换中  
              isAutoPlay = true;  
              break;  
          case 0:// 滑动结束，即切换完毕或者加载完毕  
              // 当前为最后一张，此时从右向左滑，则切换到第一张  
              if (viewPager.getCurrentItem() == viewPager.getAdapter().getCount() - 1 && !isAutoPlay) {  
                  viewPager.setCurrentItem(0);  
              }  
              // 当前为第一张，此时从左向右滑，则切换到最后一张  
              else if (viewPager.getCurrentItem() == 0 && !isAutoPlay) {  
                  viewPager.setCurrentItem(viewPager.getAdapter().getCount() - 1);  
              }  
              break;  
      }  
      }  

      @Override  
      public void onPageScrolled(int arg0, float arg1, int arg2) {  
            
      }  

      @Override  
      public void onPageSelected(int pos) {  
            
          currentItem = pos;  
          for(int i=0;i < dotViewsList.size();i++){  
              if(i == pos){  
                  ((View)dotViewsList.get(pos)).setBackgroundResource(R.drawable.dot_focus);  
              }else {  
                  ((View)dotViewsList.get(i)).setBackgroundResource(R.drawable.dot_blur);  
              }  
          }  
      }  
        
  }  
    
  /** 
   *执行轮播图切换任务 
   */  
  private class SlideShowTask implements Runnable{  

      @Override  
      public void run() {  
          // TODO Auto-generated method stub  
          synchronized (viewPager) {  
              currentItem = (currentItem+1)%imageViewsList.size();  
              handler.obtainMessage().sendToTarget();  
          }  
      }  
        
  }  
    
  /** 
   * 销毁ImageView资源，回收内存 
   */  
  private void destoryBitmaps() {  

      for (int i = 0; i < IMAGE_COUNT; i++) {  
          ImageView imageView = imageViewsList.get(i);  
          Drawable drawable = imageView.getDrawable();  
          if (drawable != null) {  
              //解除drawable对view的引用  
              drawable.setCallback(null);  
          }  
      }  
  }  
 

  public static void initImageLoader(Context context) {  
      ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
									        .threadPriority(Thread.NORM_PRIORITY - 2)
									        .denyCacheImageMultipleSizesInMemory()
									        .discCacheFileNameGenerator(new Md5FileNameGenerator())
									        .tasksProcessingOrder(QueueProcessingType.LIFO)
									        .writeDebugLogs() 
                                          .build();  
      ImageLoader.getInstance().init(config);
  }
	  
}  